import argparse


# 启动API服务的函数
def run(_args):
    """
    启动API服务。
    """
    import os
    import uvicorn
    import asyncio
    from app.app import startup

    asyncio.run(startup())

    cpu_count = os.cpu_count()
    if cpu_count is not None:
        workers = cpu_count * 2 + 1  # 这里使用了一个常见的公式，可以根据实际情况调整
    else:
        workers = 1  # 如果无法获取CPU核心数，设置默认的worker数量
    workers = 1
    uvicorn.run("app.app:app", workers=workers, host="0.0.0.0", port=8888)


def run_debug(_args):
    """
    调试启动API服务。
    """
    import uvicorn
    import asyncio
    from app.app import startup

    asyncio.run(startup())
    uvicorn.run("app.app:app", host="0.0.0.0", port=8888, reload=True)


# 解析命令行参数
parser = argparse.ArgumentParser(description="用于配置API的命令行工具。")
subparsers = parser.add_subparsers()


# 启动API的子命令解析器
start_parser = subparsers.add_parser("start", help="启动API服务。")
start_parser.set_defaults(func=run)


# 调试启动API的子命令解析器
start_parser = subparsers.add_parser("debug", help="调试启动API服务。")
start_parser.set_defaults(func=run_debug)

# 主程序入口
if __name__ == "__main__":
    args = parser.parse_args()
    args.func(args)  # 调用与给定参数对应的函数
